package com.cdsxt.util;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class ClassUtil {
	
	
	
	
	/**
	 * 获取对象的class的父类型的泛型参数类型
	 * 例如：DeptDao的 DeptPo
	 * class DeptDao extends BaseDao<DeptPo>
	 * 参数： DeptDao的对象
	 */
	public static <ParamType> Class<ParamType> getClassParamType(Object obj) {
		Class<? extends Object> cls = obj.getClass();
		return getClassParamType(cls);
	}
	/**
	 * 获取的class的父类型的泛型参数类型
	 * 例如：DeptDao的 DeptPo
	 * class DeptDao extends BaseDao<DeptPo> 
	 * 参数： DeptDao的class对象
	 */
	public static <ParamType> Class<ParamType> getClassParamType(Class<?> cls) {
		ParameterizedType type = (ParameterizedType) cls.getGenericSuperclass();
		Type[] types = type.getActualTypeArguments();
		if (types.length != 1) {
			throw new IllegalArgumentException(cls.getName()+"上的泛型参数错误,请检查!");
		}
		Class<ParamType> paramCls = (Class<ParamType>) types[0];
		return paramCls;
	}
	
}
